#pragma once

/** @class Point2D
  * @brief Двумерная точка
  */
class Point2D
{
protected:
    double m_x, m_y;

public:
    /**
      * Конструктор по умолчанию
      * Создает точку (0,0)
      */
    Point2D();

    /**
      * Конструктор, создающий точку (x,y)
      */
    Point2D(double x, double y);

    /**
      * Конструктор копирования
      */
    Point2D(const Point2D &p);

    /**
      * Получить абсциссу точки
      */ 
    double x() const;

    /**
      * Получить ординату точки
      */
    double y() const;

    /**
      * Установить значение абсциссы
      *
      * @param x абсцисса
      */
    virtual void setX(double x);

    /**
      * Устрановить значение ординаты
      *
      * @param y ордината
      */
    virtual void setY(double y);

    /**
      * Оператор присваивания
      *
      * @param p точка
      */
    virtual Point2D& operator=(const Point2D &p);

    /**
      * Оператор сравнения
      *
      * @param p точка
      */
    bool operator==(const Point2D &p) const;
};
